package cn.com.bluemoon.daps.common.datascope;

import cn.com.bluemoon.daps.common.datascope.log.OperateLog;

import java.lang.annotation.*;

/**
 * 针对必须有token才可以访问的
 *
 * @author Jarod.Kong
 * @date 2020/10/16 15:22
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface BmPermission {
    /**
     * 权限标记符
     * 必须指明，用于权限功能匹配
     *
     * @return 权限标记符
     */
    String[] value();

    /**
     * @return 名称描述
     */
    String name() default "";

    /**
     * 定义该注解是否有效
     * <important>前提是token必须有效</important>
     * <p>
     * true为忽略，不进行用户的角色&菜单权限校验
     * false为默认，进行用户的角色&菜单权限校验
     * 2020年10月28日14:52:42：针对true的情况，若请求中附带有效的token信息，则会获取该token的用户信息，提高后续请求使用
     *
     * @return f
     */
    boolean ignore() default false;

    /**
     * 增加url中参数携带token的情况
     * 为了解决文件下载的时候 前端用window.location.href进行get请求导致无法在请求头携带token
     * <code>
     * Location 对象属性
     * 属性	描述
     * hash	返回一个URL的锚部分
     * host	返回一个URL的主机名和端口
     * hostname	返回URL的主机名
     * href	返回完整的URL
     * pathname	返回的URL路径名。
     * port	返回一个URL服务器使用的端口号
     * protocol	返回一个URL协议
     * search	返回一个URL的查询部分
     * </code>
     *
     * @return b
     */
    boolean queryTokenPerm() default false;

    /**
     * 增加操作日志记录
     */
    OperateLog log() default @OperateLog();
}
